/*
 * Project Beknyou
 * Copyright (c) 2010-2011 Saint Paul College, All Rights Reserved
 * Redistributions in source code form must reproduce the above
 * Copyright and this condition.
 * The contents of this file are subject to the GNU General Public
 * License, Version 2 (the "License"); you may not use this file
 * except in compliance with the License. A copy of the License is
 * available at http://www.opensource.org/licenses/gpl-license.php.
 */
package com.benkyou.client.systems;

/**
 *
 * @author Adam Hess
 */
import com.jme3.asset.AssetManager;
import com.jme3.material.Material;
import com.jme3.terrain.geomipmap.*;
import com.jme3.terrain.heightmap.*;
import com.jme3.texture.Texture;
import com.jme3.texture.Texture.WrapMode;
import com.jme3.scene.*;
import com.jme3.water.SimpleWaterProcessor;

/**
 * 
 * @author student
 */
public class TerrainSystem {

    private TerrainQuad terrain;
    private Spatial tTerrain;
    private Material mat_terrain;
    private AssetManager mgr;

    /**
     * 
     * @param mgr
     */
    public TerrainSystem(AssetManager mgr) {
        this.mgr = mgr;
       // defaultTerrain();
        defaultWorld();
    }

    private void defaultWorld(){
         tTerrain = (Spatial) mgr.loadAsset("Scenes/DefaultWorld.j3o");
    }
    /**
     * 
     */
    public void defaultTerrain() {
        tTerrain = (Spatial) mgr.loadAsset("Textures/Terrain/testLand3.j3o");
        //make terrain material and load 4 textures into it
        mat_terrain = new Material(mgr, "Textures/Terrain/Terrain.j3md");
        //add alpha map
        mat_terrain.setTexture("Alpha", mgr.loadTexture("Textures/Terrain/alphamap3.png"));
        //add grass
        Texture grass = mgr.loadTexture("Textures/Terrain/grass.jpg");
        grass.setWrap(WrapMode.Repeat);
        mat_terrain.setTexture("Tex1", grass);
        mat_terrain.setFloat("Tex1Scale", 64f);
        //add the snow
        Texture snow = mgr.loadTexture("Textures/Terrain/snow.jpg");
        snow.setWrap(WrapMode.Repeat);
        mat_terrain.setTexture("Tex2", snow);
        mat_terrain.setFloat("Tex2Scale", 8f);
        //make a dirt road
        Texture dirt = mgr.loadTexture("Textures/Terrain/dirt.jpg");
        dirt.setWrap(WrapMode.Repeat);
        mat_terrain.setTexture("Tex3", dirt);
        mat_terrain.setFloat("Tex3Scale", 128f);
        //create height map
        HillHeightMap heightMap = null;
        try {
            heightMap = new HillHeightMap(513, 200, 25, 100, (byte) 3);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        heightMap.load();


        //create terrainQuad
        //tiles should be 1+ square number. so 64px tile is 65
        //public TerrainQuad(String name, int patchSize, int totalSize, float[] heightMap)
        //terrain = new TerrainQuad("Textures/Terrain/testLand,j3o",  );
        terrain = new TerrainQuad("my terrain", 65, 513, heightMap.getHeightMap());
        //give terrain material, position, scale it, and attach it
        terrain.setMaterial(mat_terrain);
        terrain.setLocalTranslation(0, -10, 0);
        terrain.setLocalScale(2f, 1f, 2f);
        //LOD depends on where camara is
        // List<Camera> camera1 = new ArrayList<Camera>();
        // camera1.add(getCamera());
        // TerrainLodControl lodControl = new TerrainLodControl(terrain, camera1);
        // terrain.addControl(control);

        //water stuff
        SimpleWaterProcessor waterProcessor = new SimpleWaterProcessor(mgr);
        // waterProcessor.setRelfectionScene(mainScene);



    }

    /**
     * 
     * @return
     */
    public Spatial getTerrain() {
        return tTerrain;
    }
}
